home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 076-100 / scopedisk89 / uut / strings.c < prev   
C/C++ Source or Header  |  1995-03-19  |  2KB  |  94 lines

  1. /*
  2.  * strings - extract strings of ascii text from a binary file
  3.  *
  4.  * Copyright 1989 Edwin Hoogerbeets
  5.  *
  6.  * This code is freely redistributable as long as no charge other than
  7.  * reasonable copying fees is levied for it.
  8.  *
  9.  *
  10.  * Usage: strings [file ...]
  11.  *
  12.  */
  13. #include <stdio.h>
  14. #define MINLENGTH 4
  15.  
  16. #define isprint(a) ((a) > 31 && (a) < 128)
  17.  
  18. extern char *malloc();
  19.  
  20. main(argc,argv)
  21. int argc;
  22. char **argv;
  23. {
  24.   register FILE *in;
  25.   register int i;
  26.  
  27.   if ( argc < 2 ) {
  28.     strings(stdin);
  29.   } else {
  30.     for ( i = 1; i < argc; i++) {
  31.  
  32.       if ( (in = fopen(argv[i],"r")) != NULL ) {
  33.         if ( argc > 2 )
  34.           printf("\nFile %s contains:\n",argv[i]);
  35.         strings(in);
  36.         fclose(in);
  37.       }
  38.     }
  39.   }
  40. }
  41.  
  42. strings(in)
  43. FILE *in;
  44. {
  45.   register int n, index, temp;
  46.   register char *buf = malloc(BUFSIZ+1);
  47.  
  48.   if ( buf ) {
  49.     while ( n = fread(&buf[0],1,BUFSIZ,in) ) {
  50.  
  51.       index = 0;
  52.       while ( index < n ) {
  53.  
  54.         /* pass over unprintable characters. */
  55.         while ( index < n && !isprint(buf[index]) )
  56.           ++index;
  57.  
  58.         if ( index < n ) {
  59.  
  60.           /* remember the start of the printable string */
  61.           temp = index;
  62.  
  63.           /* search through the printable characters */
  64.           while ( index < n && isprint(buf[index]) )
  65.             ++index;
  66.  
  67.           /*
  68.            * only print something out if the length of the printable
  69.            * string is at least MINLENGTH
  70.            */
  71.           if ( index - temp >= MINLENGTH ) {
  72.             /*
  73.              * zap the first unprintable character to form a printable string
  74.              * starting at temp.
  75.              */
  76.             buf[index] = '\0';
  77.  
  78.             printf("%s\n",&buf[temp]);
  79.           }
  80.         }
  81.       }
  82.     }
  83.  
  84.     free(buf);
  85.   } else {
  86.     printf("Strings error! Not enough memory.\n");
  87.   }
  88. }
  89.  
  90. _wb_parse() {}
  91.  
  92.  
  93.  
  94.